home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / CONTRSRC.ZIP / SRC / WAVES / GENMOVS.LST < prev    next >
Encoding:
File List  |  1994-11-20  |  3.1 KB  |  175 lines

  1.  
  2. Xwidth% = 160
  3. DIM buf%(32000)
  4.  
  5. FILESELECT "*.raw","",n$
  6.  
  7. OPEN "i",#1,n$
  8. ' load header + pal
  9. BGET #1,V:buf%(0),800
  10. x%=PEEK(V:buf%(0)+8)*256+PEEK(V:buf%(0)+9)
  11. y%=PEEK(V:buf%(0)+10)*256+PEEK(V:buf%(0)+11)
  12. PRINT MKL$(LPEEK(V:buf%(0)))
  13. PRINT x%,y%
  14. ' load data
  15. BGET #1,V:buf%(0),x%*y%
  16. CLOSE #1
  17. '
  18. REPEAT
  19. UNTIL INKEY$=CHR$(32)
  20. '
  21. OPEN "o",#1,LEFT$(n$,LEN(n$)-3)+"asm"
  22.  
  23. ' analyser datas et generer code
  24. CheckCode
  25.  
  26. CLOSE #1
  27. '
  28. OPEN "o",#1,LEFT$(n$,LEN(n$)-3)+"bin"
  29. FOR iy%=0 TO y%-1
  30.   FOR ix%=0 TO x%-1
  31.     IF PEEK(V:buf%(0)+ix%+iy%*x%)<>0
  32.       POKE (V:buf%(0)+ix%+iy%*x%),PEEK(V:buf%(0)+ix%+iy%*x%)
  33.       BPUT #1,V:buf%(0)+ix%+iy%*x%,1
  34.     ENDIF
  35.   NEXT ix%
  36. NEXT iy%
  37. CLOSE #1
  38. '
  39. EDIT
  40.  
  41.  
  42. PROCEDURE Genadd(ct%)
  43.   IF (ct% = 1) THEN 
  44.     ' INC DI
  45.     PRINT #1;" db 47h"
  46.   ELSE IF (ct% < 128)
  47.     ' ADD DI, byte
  48.     PRINT #1;" db 83h,0c7h,";ct%
  49.   ELSE
  50.     ' ADD DI, word
  51.     PRINT #1," db 81h,0c7h"
  52.     PRINT #1;" dw ";ct%
  53.   ENDIF
  54. RETURN
  55.  
  56. PROCEDURE Gencode(dt%)
  57.   IF (dt%>0) THEN 
  58.     
  59.     SELECT dt%
  60.       
  61.     CASE 1
  62.       ' A4 = code de MOVSB
  63.       PRINT #1;" db 0A4h"
  64.     CASE 2
  65.       ' A5 = code de MOVSW
  66.       PRINT #1;" db 0A5h"
  67.     CASE 3
  68.       ' 3 octets
  69.       PRINT #1;" db 0A5h,0A4h"
  70.     CASE 4
  71.       ' 4 octets = code de MOVSD
  72.       PRINT  #1;" db 066h,0A5h"
  73.     CASE 5
  74.       ' 5 octets
  75.       PRINT #1;" db 066h,0A5h,0A4h"
  76.     CASE 6
  77.       ' 6 octets
  78.       PRINT #1;" db 066h,0A5h,0A5h"
  79.     CASE 7
  80.       ' 7 octets
  81.       PRINT #1;" db 066h,0A5h,0A5h,0A4h"
  82.     CASE 8
  83.       ' 8 octets
  84.       PRINT #1;" db 066h,0A5h,066h,0A5h"
  85.     CASE 9
  86.       ' 9 octets
  87.       PRINT #1;" db 066h,0A5h,066h,0A5h,0A4h"
  88.     CASE 10
  89.       ' 10 octets
  90.       PRINT #1;" db 066h,0A5h,066h,0A5h,0A5h"
  91.     CASE 11
  92.       ' 11 octets
  93.       PRINT #1;" db 066h,0A5h,066h,0A5h,0A5h,0A4h"
  94.       
  95.     DEFAULT
  96.       
  97.       ' MOV CL,x  REP MOVSD
  98.       PRINT #1;" db 0B1h,";SHR(dt%,2);",0F3h,066h,0A5h"
  99.       IF (dt% AND 2)=1 THEN 
  100.         ' MOVSW
  101.         PRINT #1;" db 0A5h"
  102.       ENDIF
  103.       
  104.       IF (dt% AND 1)=1 THEN 
  105.         ' MOVSB si Impaire
  106.         PRINT #1;" db 0A4h"
  107.       ENDIF
  108.       
  109.     ENDSELECT 
  110.     
  111.   ENDIF
  112.   
  113. RETURN
  114.  
  115.  
  116. PROCEDURE CheckCode
  117.   LOCAL ix%,iy%,cod%,ct%,dt%
  118.   
  119.   SCREEN $13
  120.   
  121.   ' compteur blancs à 0
  122.   ct%=0
  123.   dt%=0
  124.   
  125.   FOR iy%=0 TO y%-1
  126.     FOR ix%=0 TO x%-1
  127.       cod%=PEEK(V:buf%(0)+ix%+iy%*x%)
  128.       
  129.       IF (cod% = 0) THEN 
  130.         
  131.         IF (ct% = 0) AND (dt% > 0) THEN 
  132.           Gencode(dt%)
  133.           dt%=0
  134.         ENDIF
  135.         
  136.         ' un blanc en +
  137.         INC ct%
  138.         
  139.       ELSE
  140.         
  141.         POKE $a000:ix%+iy%*320,15
  142.         
  143.         IF (dt% = 0) AND (ct%>0) THEN 
  144.           Genadd(ct%)
  145.           ct%=0
  146.         ENDIF
  147.         
  148.         ' more data
  149.         
  150.         INC dt%
  151.         
  152.       ENDIF
  153.       
  154.     NEXT ix%
  155.     
  156.     IF (ct% > 0) THEN 
  157.       ' next line
  158.       ADD ct%,Xwidth% - x%
  159.     ELSE
  160.       Gencode(dt%)
  161.       dt% = 0
  162.       ' passer a la ligne
  163.       Genadd(Xwidth%-x%)
  164.     ENDIF
  165.     
  166.   NEXT iy%
  167.   
  168.   REPEAT
  169.   UNTIL INKEY$=CHR$(32)
  170.   
  171.   SCREEN $3
  172.   
  173. RETURN
  174.  
  175.